<?php
/**
 * 商品分类控制器
 * Created by PhpStorm.
 * User: Jmashimaro
 * Date: 2015/2/9
 * Time: 12:14
 */
class CategoryApp extends MallbaseApp {

    /**
     * 获取商品品牌列表
     * @author jiayanxiu
     * @date 2015/06/12
     */
    public function index() {
        $method = strtoupper($_SERVER['REQUEST_METHOD']);
        if ($method != 'GET') {
            $this->ajax_return(FLAG_ERROR, '非法操作！');
        }
        $offset = $this->get_gp('offset', 'G');
        $size = $this->get_gp('size', 'G');
        $offset = ($offset > 0) ? intval($offset) : 0;
        $size = ($size > 0) ? intval($size) : 10;
        $sql = "SELECT cate_id,cate_name,cate_image,english_name FROM ".DB_PREFIX."gcategory WHERE store_id=0
                AND parent_id=0 AND if_show=1 ORDER BY sort_order DESC,cate_id DESC LIMIT {$offset},{$size}";
        $model = m('gcategory');
        $info = $model->getAll($sql);
        if ($info) {
            foreach ($info as $key=>$val) {
                $val['id'] = $val['cate_id'];
                $val['value'] = $val['cate_name'];
                $val['cate_image'] = $val['cate_image'] ? QINIU_URL.$val['cate_image'] : '';
                $info[$key] = $val;
            }
        }
        $this->ajax_return(FLAG_OK, '', $info);
    }

    /**
     * 最受欢迎店铺的品牌列表
     * @author jiayanxiu
     * @date 2015/02/09
     */
    public function popularList() {
        $config = require ROOT_PATH.'/data/config.qiniu.php';
        $method = strtoupper($_SERVER['REQUEST_METHOD']);
        if ($method != 'GET') {
            $this->ajax_return(FLAG_ERROR, '非法操作！');
        }

        //检测用户是否登陆
        $user_id = $this->checkLogin();

        $cate_id = $this->get_gp('cate_id', 'G');
        $offset = $this->get_gp('offset', 'G');
        $size = $this->get_gp('size', 'G');
        $cate_id = $cate_id ? intval($cate_id) : 0;
        if (!$cate_id) {
            $this->ajax_return(FLAG_ERROR, '不存在的cate_id');
        }
        $offset = $offset ? intval($offset) : 0;
        $size = $size ? intval($size) : 5;

        $domain = get_domain().'/';
        $model = m('store');
        $sql = "SELECT a.store_id,a.store_name,a.store_logo FROM ".DB_PREFIX."store a
                INNER JOIN ".DB_PREFIX."goods b ON a.store_id = b.store_id AND b.cate_id_1 = {$cate_id}
                AND b.if_examine = 1 AND b.if_finance = 1 AND b.if_show = 1 AND b.closed = 0
                group by a.store_id ORDER BY collects DESC LIMIT {$offset},{$size}";
        $data = $model->getAll($sql);
        if ($data) {
            foreach ($data as $key=>$val) {
                if ($user_id) {
                    $val['follow'] = $this->getRelationShip($user_id, $val['store_id']);//获取关注关系
                } else {
                    $val['follow'] = 0;
                }

                $val['store_logo'] = $val['store_logo'] ? $config['qiniu_url'].$val['store_logo'] : $domain.Conf::get('default_goods_image');
                $sql = "SELECT goods_id,goods_name,price,introduction,default_image FROM ".DB_PREFIX."goods
                        WHERE store_id={$val['store_id']} AND cate_id_1={$cate_id}
                        AND if_examine = 1 AND if_finance = 1 AND if_show = 1 AND closed = 0
                        ORDER BY add_time DESC LIMIT 0,6";
                $goods = $model->getAll($sql);
                if ($goods) {
                    foreach ($goods as $k=>$v) {
                        //查询出库存数
                        $v['total_stock'] = $this->getStock($v['goods_id'], $model);
                        $v['default_image'] = $v['default_image'] ? $config['qiniu_url'].$v['default_image'] : $domain.Conf::get('default_goods_image');
                        $v['introduction'] = stripslashes($v['introduction']);
                        $v['goods_name'] = stripslashes($v['goods_name']);
                        $goods[$k]=$v;
                    }
                    $val['goods'] = $goods;
                    $data[$key] = $val;
                }else{//删除没有分类商品的店铺
                    unset($data[$key]);
                }
            }
        }
        $this->ajax_return(FLAG_OK,'', $data);
}


    /**
     * 按字母排序品牌列表
     * @return mixed
     * @author jiayanxiu
     * @date 2015/02/10
     */
    public function wordsList() {
        $config = require ROOT_PATH.'/data/config.qiniu.php';
        $method = strtoupper($_SERVER['REQUEST_METHOD']);
        if ($method != 'GET') {
            $this->ajax_return(FLAG_ERROR, '非法操作！');
        }
        //检测用户是否登陆
        $user_id = $this->checkLogin();

        $cate_id = $this->get_gp('cate_id', 'G');
        $cate_id = $cate_id ? intval($cate_id) : 0;
        if (!$cate_id) {
            $this->ajax_return(FLAG_ERROR, '不存在的cate_id');
        }
        $domain = get_domain().'/';
        $model = m('store');
        $sql = "SELECT store_id,store_name,store_logo FROM ".DB_PREFIX."store";
        $data = $model->getAll($sql);
        if ($data) {
            foreach ($data as $key=>$val) {
                if ($user_id) {
                    $val['follow'] = $this->getRelationShip($user_id, $val['store_id']);//获取关注关系
                } else {
                    $val['follow'] = 0;
                }
                $val['store_logo'] = $val['store_logo'] ? $config['qiniu_url'].$val['store_logo'] : $domain.Conf::get('default_goods_image');
                $val['words'] = strtolower(Translate::get_words($val['store_name']));
                $sql = "SELECT goods_id,goods_name,price,introduction,default_image FROM ".DB_PREFIX."goods WHERE store_id={$val['store_id']} AND cate_id_1={$cate_id}
                        AND if_examine = 1 AND if_finance = 1 AND if_show = 1 AND closed = 0 ";
                $goods = $model->getAll($sql);
                if ($goods) {
                    foreach ($goods as $k=>$v) {
                        //查询出库存数
                        $v['total_stock'] = $this->getStock($v['goods_id'], $model);
                        $v['default_image'] = $v['default_image'] ? $config['qiniu_url'].$v['default_image'] : $domain.Conf::get('default_goods_image');
                        $v['introduction'] = stripslashes($v['introduction']);
                        $v['goods_name'] = stripslashes($v['goods_name']);
                        $goods[$k]=$v;
                    }
                    $val['goods'] = $goods;
                    $list[$val['words']] = $val;
                } else {
                    unset($data[$key]);
                }

            }
        }
        ksort($list);
        if ($list) {
            foreach ($list as $key=>$val) {
                $tmp[] = $val;
            }
        }
        $this->ajax_return(FLAG_OK,'', $tmp);
    }

    /**
     * 获取我与商铺是否关注
     * @param $user_id
     * @param $store_id
     * @return int
     * @author jiayanxiu
     * @date 2015/02/10
     */
    private function getRelationShip($user_id, $store_id) {
        $model = m('store');
        $sql = 'SELECT user_id FROM '.DB_PREFIX."collect WHERE user_id={$user_id} AND type='store' AND item_id={$store_id}";
        $info = $model->getRow($sql);
        if ($info) {
            return 1;
        } else {
            return 0;
        }
    }

    /**
     * 获取商品库存数量
     * @param $goods_id
     * @param $obj
     * @return mixed
     * @author jyx
     * @date 2015/07/17
     */
    private function getStock($goods_id, $obj) {
        $sql = "SELECT SUM(stock) AS total_stock FROM ".DB_PREFIX."goods_spec WHERE goods_id={$goods_id}";
        $row = $obj->getRow($sql);
        return $row['total_stock'];
    }

    /**
     * 获取一级分类
     * @author jyx
     * @date 2015/07/29
     */
    public function cateList() {
        $model = m('gcategory');
        //获取一级分类和二级分类
        $data = array();
        $sql = "SELECT cate_id,cate_name,parent_id FROM ".DB_PREFIX."gcategory WHERE parent_id=0 AND store_id=0 AND if_show=1
                ORDER BY sort_order DESC,cate_id ASC";
        $data = $model->getAll($sql);
        if ($data) {
            foreach ($data as $key=>$val) {
                $tmp = array();
                $sql = "SELECT cate_id,cate_name,parent_id FROM ".DB_PREFIX."gcategory WHERE parent_id={$val['cate_id']} AND store_id=0 AND if_show=1
                ORDER BY sort_order DESC,cate_id ASC";
                $tmp = $model->getAll($sql);
                $val['sub'] = $tmp;
                $data[$key] = $val;
            }
        }
        $this->ajax_return(FLAG_OK, '', $data);
    }


    /**
     * 分类信息下的商品列表
     * @author jyx
     * @date 2015/07/29
     */
    public function goodsList() {
        $offset     = $this->get_gp('offset', 'G');
        $size       = $this->get_gp('size', 'G');
        $cate_id1   = $this->get_gp('cate_id1', 'G');
        $cate_id2   = $this->get_gp('cate_id2', 'G');
        $cate_id1   = $cate_id1 ? intval($cate_id1) : 0;
        $cate_id2   = $cate_id2 ? intval($cate_id2) : 0;
        $offset     = $offset ? intval($offset) : 0;
        $size       = $size ? intval($size) : 10;
        $condition = $conditions = '';

        if ($cate_id1) {
            $conditions = "cate_id={$cate_id1}";
            $condition = "cate_id_1={$cate_id1}";
        } else {
            $conditions = "parent_id={$cate_id1}";
        }

        $model = m('gcategory');
        $tmp = array();
        //获取一级分类和二级分类
        $sql = "SELECT cate_id,cate_name,parent_id FROM ".DB_PREFIX."gcategory WHERE $conditions AND store_id=0
                AND if_show=1 ORDER BY sort_order DESC,cate_id ASC Limit 1";
        $cate = $model->getRow($sql);
        if ($cate) {
            $sql = "SELECT cate_id,cate_name,parent_id FROM ".DB_PREFIX."gcategory WHERE parent_id={$cate['cate_id']}
            AND store_id=0 ORDER BY sort_order DESC,cate_id ASC";
            $tmp = $model->getRow($sql);
        }
        $cate['sub'] = $tmp;
        if (!$cate_id1) {
            $condition = "cate_id_1={$cate['cate_id']}";
        }
        if ($cate_id2) {
            $condition .= " AND cate_id_2={$cate_id2} ";
        }
        $goods = array();
        //获取分类下的商品
        $sql = "SELECT goods_id,goods_name,price,default_image FROM ".DB_PREFIX."goods WHERE {$condition} ORDER BY goods_id DESC LIMIT {$offset},{$size}";
        $goods = $model->getAll($sql);
        if ($goods) {
            foreach ($goods as $key=>$val) {
                $val['default_image'] = $val['default_image'] ? QINIU_URL.$val['default_image'] : '';
                $goods[$key] = $val;
            }
        }

        $data['cate'] = $cate;
        $data['goods'] = $goods;
        $this->ajax_return(FLAG_OK, '', $data);

    }





}


/**
 * 汉字转拼音代码库
 * Class Translate
 * @author jiayanxiu
 * @date 2015/02/09
 */
class Translate{

    private static $spellingArr = NULL;

    /**
     * 对外接口
     */
    public static function get_words($string, $utf8 = true, $pix = '|') {
        $string = ($utf8 === true) ? mb_convert_encoding($string, 'gbk', 'utf-8') : $string;
        if (self::$spellingArr == NULL) {
            self::$spellingArr = self::spelling_code();
        }
        $num = strlen($string);
        $spelling = '';
        for ($i = 0; $i < $num; $i++) {
            $temp = ord(substr($string, $i, 1));
            if ($temp > 160) {
                $temp2 = ord(substr($string, ++$i, 1));
                $temp = $temp * 256 + $temp2 - 65536;
            }
            if ($temp > 0 && $temp < 160) {
                $spelling .= chr($temp);
            } elseif ($temp < -20319 || $temp > -10247) {
                $spelling .= '';
            } else {
                $total = sizeof(self::$spellingArr) - 1;
                for ($j = $total; $j >= 0; $j--) {
                    if (self::$spellingArr[$j][1] <= $temp) {
                        break;
                    }
                }
                $spelling .= self::$spellingArr[$j][0];
            }
            $spelling .= $pix;
        }
        if ($pix) {
            $row = explode($pix, $spelling);
            $spelling = '';
            foreach ($row as $val) {
                if ($val) {
                    $spelling .= substr($val, 0, 1);
                }
            }
        }
        return ($utf8 == true) ? mb_convert_encoding($spelling, 'utf-8', 'gbk') : $spelling;
    }

    /**
     * 拼音代码库
     * @return array
     */
    public static function spelling_code(){
        return array(
            array("a", -20319),
            array("ai", -20317),
            array("an", -20304),
            array("ang", -20295),
            array("ao", -20292),
            array("ba", -20283),
            array("bai", -20265),
            array("ban", -20257),
            array("bang", -20242),
            array("bao", -20230),
            array("bei", -20051),
            array("ben", -20036),
            array("beng", -20032),
            array("bi", -20026),
            array("bian", -20002),
            array("biao", -19990),
            array("bie", -19986),
            array("bin", -19982),
            array("bing", -19976),
            array("bo", -19805),
            array("bu", -19784),
            array("ca", -19775),
            array("cai", -19774),
            array("can", -19763),
            array("cang", -19756),
            array("cao", -19751),
            array("ce", -19746),
            array("ceng", -19741),
            array("cha", -19739),
            array("chai", -19728),
            array("chan", -19725),
            array("chang", -19715),
            array("chao", -19540),
            array("che", -19531),
            array("chen", -19525),
            array("cheng", -19515),
            array("chi", -19500),
            array("chong", -19484),
            array("chou", -19479),
            array("chu", -19467),
            array("chuai", -19289),
            array("chuan", -19288),
            array("chuang", -19281),
            array("chui", -19275),
            array("chun", -19270),
            array("chuo", -19263),
            array("ci", -19261),
            array("cong", -19249),
            array("cou", -19243),
            array("cu", -19242),
            array("cuan", -19238),
            array("cui", -19235),
            array("cun", -19227),
            array("cuo", -19224),
            array("da", -19218),
            array("dai", -19212),
            array("dan", -19038),
            array("dang", -19023),
            array("dao", -19018),
            array("de", -19006),
            array("deng", -19003),
            array("di", -18996),
            array("dian", -18977),
            array("diao", -18961),
            array("die", -18952),
            array("ding", -18783),
            array("diu", -18774),
            array("dong", -18773),
            array("dou", -18763),
            array("du", -18756),
            array("duan", -18741),
            array("dui", -18735),
            array("dun", -18731),
            array("duo", -18722),
            array("e", -18710),
            array("en", -18697),
            array("er", -18696),
            array("fa", -18526),
            array("fan", -18518),
            array("fang", -18501),
            array("fei", -18490),
            array("fen", -18478),
            array("feng", -18463),
            array("fo", -18448),
            array("fou", -18447),
            array("fu", -18446),
            array("ga", -18239),
            array("gai", -18237),
            array("gan", -18231),
            array("gang", -18220),
            array("gao", -18211),
            array("ge", -18201),
            array("gei", -18184),
            array("gen", -18183),
            array("geng", -18181),
            array("gong", -18012),
            array("gou", -17997),
            array("gu", -17988),
            array("gua", -17970),
            array("guai", -17964),
            array("guan", -17961),
            array("guang", -17950),
            array("gui", -17947),
            array("gun", -17931),
            array("guo", -17928),
            array("ha", -17922),
            array("hai", -17759),
            array("han", -17752),
            array("hang", -17733),
            array("hao", -17730),
            array("he", -17721),
            array("hei", -17703),
            array("hen", -17701),
            array("heng", -17697),
            array("hong", -17692),
            array("hou", -17683),
            array("hu", -17676),
            array("hua", -17496),
            array("huai", -17487),
            array("huan", -17482),
            array("huang", -17468),
            array("hui", -17454),
            array("hun", -17433),
            array("huo", -17427),
            array("ji", -17417),
            array("jia", -17202),
            array("jian", -17185),
            array("jiang", -16983),
            array("jiao", -16970),
            array("jie", -16942),
            array("jin", -16915),
            array("jing", -16733),
            array("jiong", -16708),
            array("jiu", -16706),
            array("ju", -16689),
            array("juan", -16664),
            array("jue", -16657),
            array("jun", -16647),
            array("ka", -16474),
            array("kai", -16470),
            array("kan", -16465),
            array("kang", -16459),
            array("kao", -16452),
            array("ke", -16448),
            array("ken", -16433),
            array("keng", -16429),
            array("kong", -16427),
            array("kou", -16423),
            array("ku", -16419),
            array("kua", -16412),
            array("kuai", -16407),
            array("kuan", -16403),
            array("kuang", -16401),
            array("kui", -16393),
            array("kun", -16220),
            array("kuo", -16216),
            array("la", -16212),
            array("lai", -16205),
            array("lan", -16202),
            array("lang", -16187),
            array("lao", -16180),
            array("le", -16171),
            array("lei", -16169),
            array("leng", -16158),
            array("li", -16155),
            array("lia", -15959),
            array("lian", -15958),
            array("liang", -15944),
            array("liao", -15933),
            array("lie", -15920),
            array("lin", -15915),
            array("ling", -15903),
            array("liu", -15889),
            array("long", -15878),
            array("lou", -15707),
            array("lu", -15701),
            array("lv", -15681),
            array("luan", -15667),
            array("lue", -15661),
            array("lun", -15659),
            array("luo", -15652),
            array("ma", -15640),
            array("mai", -15631),
            array("man", -15625),
            array("mang", -15454),
            array("mao", -15448),
            array("me", -15436),
            array("mei", -15435),
            array("men", -15419),
            array("meng", -15416),
            array("mi", -15408),
            array("mian", -15394),
            array("miao", -15385),
            array("mie", -15377),
            array("min", -15375),
            array("ming", -15369),
            array("miu", -15363),
            array("mo", -15362),
            array("mou", -15183),
            array("mu", -15180),
            array("na", -15165),
            array("nai", -15158),
            array("nan", -15153),
            array("nang", -15150),
            array("nao", -15149),
            array("ne", -15144),
            array("nei", -15143),
            array("nen", -15141),
            array("neng", -15140),
            array("ni", -15139),
            array("nian", -15128),
            array("niang", -15121),
            array("niao", -15119),
            array("nie", -15117),
            array("nin", -15110),
            array("ning", -15109),
            array("niu", -14941),
            array("nong", -14937),
            array("nu", -14933),
            array("nv", -14930),
            array("nuan", -14929),
            array("nue", -14928),
            array("nuo", -14926),
            array("o", -14922),
            array("ou", -14921),
            array("pa", -14914),
            array("pai", -14908),
            array("pan", -14902),
            array("pang", -14894),
            array("pao", -14889),
            array("pei", -14882),
            array("pen", -14873),
            array("peng", -14871),
            array("pi", -14857),
            array("pian", -14678),
            array("piao", -14674),
            array("pie", -14670),
            array("pin", -14668),
            array("ping", -14663),
            array("po", -14654),
            array("pu", -14645),
            array("qi", -14630),
            array("qia", -14594),
            array("qian", -14429),
            array("qiang", -14407),
            array("qiao", -14399),
            array("qie", -14384),
            array("qin", -14379),
            array("qing", -14368),
            array("qiong", -14355),
            array("qiu", -14353),
            array("qu", -14345),
            array("quan", -14170),
            array("que", -14159),
            array("qun", -14151),
            array("ran", -14149),
            array("rang", -14145),
            array("rao", -14140),
            array("re", -14137),
            array("ren", -14135),
            array("reng", -14125),
            array("ri", -14123),
            array("rong", -14122),
            array("rou", -14112),
            array("ru", -14109),
            array("ruan", -14099),
            array("rui", -14097),
            array("run", -14094),
            array("ruo", -14092),
            array("sa", -14090),
            array("sai", -14087),
            array("san", -14083),
            array("sang", -13917),
            array("sao", -13914),
            array("se", -13910),
            array("sen", -13907),
            array("seng", -13906),
            array("sha", -13905),
            array("shai", -13896),
            array("shan", -13894),
            array("shang", -13878),
            array("shao", -13870),
            array("she", -13859),
            array("shen", -13847),
            array("sheng", -13831),
            array("shi", -13658),
            array("shou", -13611),
            array("shu", -13601),
            array("shua", -13406),
            array("shuai", -13404),
            array("shuan", -13400),
            array("shuang", -13398),
            array("shui", -13395),
            array("shun", -13391),
            array("shuo", -13387),
            array("si", -13383),
            array("song", -13367),
            array("sou", -13359),
            array("su", -13356),
            array("suan", -13343),
            array("sui", -13340),
            array("sun", -13329),
            array("suo", -13326),
            array("ta", -13318),
            array("tai", -13147),
            array("tan", -13138),
            array("tang", -13120),
            array("tao", -13107),
            array("te", -13096),
            array("teng", -13095),
            array("ti", -13091),
            array("tian", -13076),
            array("tiao", -13068),
            array("tie", -13063),
            array("ting", -13060),
            array("tong", -12888),
            array("tou", -12875),
            array("tu", -12871),
            array("tuan", -12860),
            array("tui", -12858),
            array("tun", -12852),
            array("tuo", -12849),
            array("wa", -12838),
            array("wai", -12831),
            array("wan", -12829),
            array("wang", -12812),
            array("wei", -12802),
            array("wen", -12607),
            array("weng", -12597),
            array("wo", -12594),
            array("wu", -12585),
            array("xi", -12556),
            array("xia", -12359),
            array("xian", -12346),
            array("xiang", -12320),
            array("xiao", -12300),
            array("xie", -12120),
            array("xin", -12099),
            array("xing", -12089),
            array("xiong", -12074),
            array("xiu", -12067),
            array("xu", -12058),
            array("xuan", -12039),
            array("xue", -11867),
            array("xun", -11861),
            array("ya", -11847),
            array("yan", -11831),
            array("yang", -11798),
            array("yao", -11781),
            array("ye", -11604),
            array("yi", -11589),
            array("yin", -11536),
            array("ying", -11358),
            array("yo", -11340),
            array("yo", -11340),
            array("yong", -11339),
            array("you", -11324),
            array("yu", -11303),
            array("yuan", -11097),
            array("yue", -11077),
            array("yun", -11067),
            array("za", -11055),
            array("zai", -11052),
            array("zan", -11045),
            array("zang", -11041),
            array("zao", -11038),
            array("ze", -11024),
            array("zei", -11020),
            array("zen", -11019),
            array("zeng", -11018),
            array("zha", -11014),
            array("zhai", -10838),
            array("zhan", -10832),
            array("zhang", -10815),
            array("zhao", -10800),
            array("zhe", -10790),
            array("zhen", -10780),
            array("zheng", -10764),
            array("zhi", -10587),
            array("zhong", -10544),
            array("zhou", -10533),
            array("zhu", -10519),
            array("zhua", -10331),
            array("zhuai", -10329),
            array("zhuan", -10328),
            array("zhuang", -10322),
            array("zhui", -10315),
            array("zhun", -10309),
            array("zhuo", -10307),
            array("zi", -10296),
            array("zong", -10281),
            array("zou", -10274),
            array("zu", -10270),
            array("zuan", -10262),
            array("zui", -10260),
            array("zun", -10256),
            array("zuo", -10254),
        );
    }
}